#ifndef INTERPRETE_H
#define INTERPRETE_H

#include "proceso.h"
#include "metronomo.h"
#include "compas.h"
#include "patron.h"

class Interprete : public Proceso
{
	Q_OBJECT

public:
	Interprete();
	~Interprete();

	int getTempo() { return metronomo.getTempo(); }
	void setTempo(int tempo) { metronomo.setTempo(tempo); }

	quint64 getMilisegundosDesdeInicio() {
		return metronomo.getMilisegundosDesdeInicio();
	}
    
    void setPatron(const Patron& patron);

    Patron getPatron() { return patron; }

//void setCompas(const Compas& compas);
//
    Compas getCompasActual();

    double getProporcionCompletadaDelPatron();

	//double getProporcionCompletadoCompas() {
	//	return metronomo.getProporcionCompletadoCompas();
	//}

	quint64 getMilisegundoInicioPatron();

	double getMilisegundosPorPatron() {
        return metronomo.getMilisegundosPorCompas() * patron.getNumeroCompases();
	}

	void setReproducirSonidoMetronomo(bool reproducir) {
		metronomo.setReproducirSonido(reproducir);
	}

	bool getReproducirSonidoMetronomo() {
		return metronomo.getReproducirSonido();
	}

protected:
	void inicio();
	void proceso();
	void fin();

	bool procesarNota();
	void primeraNota();
	void siguienteNota();

    void asignarCompasActual(int numeroCompas);

private:
	Metronomo metronomo;

    Patron patron;
    Compas compasActual;
	NotaCompas notaActual;

    int numeroCompasActual;
    int numeroNotaActual;
};

#endif // INTERPRETE_H
